﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NutriLeaf.Web.Core.General;

namespace NutriLeaf.Web.Core.Restaurants
{
    public interface IRestaurant
    {
        RestaurantData GetRestaurantData(int restaurantId,ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        int GetRestaurantID(string restaurantName, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        int GetRestaurantID(RestaurantData restaurant, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        List<RestaurantBranchData> GetRestaurantBranchData(int restaurantId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        List<Model.RestaurantBranch> GetRestaurantBranch(int restaurantId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        List<Model.RestaurantFood> GetRestaurantFoods(int restaurantId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        List<RestaurantFoodData> GetRestaurantFoodData(int restaurantId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        Model.RestaurantFood GetRestaurantFood(int restaurantFoodId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

     
        Model.Restaurant GetRestaurant(int restaurantId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void InsertRestaurant(RestaurantData restaurantData, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void InsertRestaurant(List<RestaurantData> restaurantData, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void InsertRestaurantFood(List<Model.RestaurantFood> restaurantFood, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void InsertRestaurantFoodData(List<RestaurantFoodData> foodData, int restaurantId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void InsertRestaurantBranch(List<Model.RestaurantBranch> branch, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void InsertRestaurantBranchData(List<RestaurantBranchData> branch, int restaurantId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void InsertRestaurantFood(Model.RestaurantFood restaurantFood, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void InsertRestaurantFoodData(RestaurantFoodData foodData, int restaurantId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void InsertRestaurantBranch(Model.RestaurantBranch branch, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void InsertRestaurantBranchData(RestaurantBranchData branch, int restaurantId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void RemoveRestaurant(int restauirantId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void RemoveRestaurantBranch(int restaurantBranchId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void RemoveRestaurantFood(int restaurantFoodId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void UpdateRestaurantBranch(Model.RestaurantBranch branch, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void UpdateRestaurant(Model.Restaurant restaurant, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void UpdateRestaurantFood(Model.RestaurantFood food, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        List<StringIdPair> GetNearestRestaurantsSIPair(Model.Location location, int count, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        List<Model.Restaurant> GetNearestRestaurants(Model.Location location, int count, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        List<RestaurantData> GetNearestRestaurantData(Model.Location location, int count, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        List<string> GetRestaurantNames(string startsWith, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        RestaurantData GetRestaurantData(string restaurantName, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void VisitRestaurant(Model.UserRestaurant userRestaurant, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void VisitRestaurant(int userId, int restaurantId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void EatFoodInRestaurant(Model.UserRestaurantFood userRestaurantFood, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void EatFoodInRestaurant(int userRestaurantId, int foodId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        List<Model.Food> GetAllFoodsUserAteInRestaurantVisit(int userRestaurantId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        List<Model.UserRestaurantFood> GetAllUserRestaurantFoods(int userRestaurantId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void RemoveUserRestaurantFood(int userRestaurantFoodId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        void RemoveUserRestaurant(int userRestaurantId, ref NutriLeaf.Web.Model.NutriLeafDBEntities context);

        List<Model.RestaurantBranch> SuggestRestaurant(int userId, Model.Location location, DateTime datetime, ref NutriLeaf.Web.Model.NutriLeafDBEntities context); //suggest a restaurant to the user - NUTRI SENSE

        List<RestaurantData> SuggestRestaurantData(int userId, Model.Location location, DateTime datetime, ref NutriLeaf.Web.Model.NutriLeafDBEntities context); // NUTRI SENSE

    }
}